//
//  LRPopoverAnimation.swift
//  LRWeibo
//
//  Created by 雷路荣 on 15/12/31.
//  Copyright © 2015年 leilurong. All rights reserved.
//

import UIKit
//设置展开时动画
class LRPopoverAnimation: NSObject, UIViewControllerAnimatedTransitioning {
    //转场动画时间
    func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
        return 0.5
    }
    
    /*
        transitionContext: UIViewControllerContextTransitioning提供转场需要的相关元素
        1.containerView(): 获取容器视图
        2.completeTransition(): 告诉系统转场动画是否完成.非常重要
        3.viewControllerForKey(key: String): 获取控制器
        3.1: UITransitionContextFromViewControllerKey:
        如果是弹出控制器,那么获取到的是调用presentViewController方法的控制器
        如果是关闭控制器,那么获取到的是modal出来的控制器
        3.2: UITransitionContextToViewControllerKey
        如果是弹出控制器,那么获取到的是modal出来的控制器
        如果是关闭控制器,那么获取到的是调用presentViewController方法的控制器
        4.viewForKey(key: String): 获取控制器的view
        4.1: UITransitionContextFromViewKey
        如果是弹出控制器,那么获取到的是调用presentViewController方法的控制器的view
        如果是关闭控制器,那么获取到的是modal出来的控制器的view
        4.2: UITransitionContextToViewKey
        如果是弹出控制器,那么获取到的是modal出来的控制器的view
        如果是关闭控制器,那么获取到的是调用presentViewController方法的控制器的view
    */
    // 具体实现转场动画
    // 注意: 当实现这个方法后,需要我们手动将元素添加到容器视图,充分地让我们自定义转场动画
    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
        //获取目标view
        let toView = transitionContext.viewForKey(UITransitionContextToViewKey)
        // 将modal出来的控制器的view添加到容器视图
        transitionContext.containerView()?.addSubview(toView!)
        // 设置y方向的缩放
        toView?.transform = CGAffineTransformMakeScale(1, 0)
        // 修改锚点
        toView?.layer.anchorPoint = CGPointMake(0.5, 0)
        //做动画
        UIView.animateWithDuration(transitionDuration(transitionContext), animations: { () -> Void in
            
            toView?.transform = CGAffineTransformIdentity//CGAffineTransformMakeScale(1, 1)
            }) { (_) -> Void in
            //必须告诉系统转场动画完成
            transitionContext.completeTransition(true)
        }
    }
    
    
}







































